package com.gxa.community.agent.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.gxa.community.agent.service.AfterSalesService;
import com.gxa.community.core.common.RegExpression;
import com.gxa.community.core.pojo.vo.order.AfterSalesVo;
import com.gxa.community.core.pojo.vo.order.OrderInfoVo;
import com.gxa.community.core.utils.LittleUtils;
import com.gxa.community.core.utils.R;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.regex.Pattern;

@RestController
@RequestMapping("/order")
public class AfterSalesController {

    final AfterSalesService afterSalesService;

    public AfterSalesController(AfterSalesService afterSalesService) {
        this.afterSalesService = afterSalesService;
    }

    /**
     * 新增售后申请
     */
    @PostMapping("/addAfterSales")
    public R addAfterSales(@RequestBody AfterSalesVo salesVo) {

        long substring = Long.parseLong(salesVo.getOrderNo().substring(0, 13));

        if (LittleUtils.checkStartEndTime(substring,System.currentTimeMillis(),
                LittleUtils.DAY * 7) == 2)
            return R.error("该订单已经不能进行售后");


        if (salesVo.getUserId() == null || salesVo.getUserId() < 1) return R.error("用户信息有误");
        if (StringUtils.isBlank(salesVo.getOrderNo())) return R.error("订单编号不能为空");
        if (LittleUtils.checkNum(salesVo.getType(), 1, 3)) R.error("售后类型有误");
        if (StringUtils.isBlank(salesVo.getDesc())) return R.error("问题描述不能为空");
        if (StringUtils.isBlank(salesVo.getPic())) return R.error("截图凭证不能为空");
        if (LittleUtils.checkNum(salesVo.getRequestReason(), 1, 5)) return R.error("退款原因有误");

        return afterSalesService.addAfterSales(salesVo);
    }


    /**
     * 查询售后全部记录
     *
     * @return 查询售后全部记录
     */
    @PostMapping("/queryOrder")
    public R queryOrder(Integer page, Integer size, @RequestBody OrderInfoVo o) {
        // 数据校验
        if (page == null || page < 1) page = 1;
        if (size == null || size < 1 || size > 100) size = 5;

        if (LittleUtils.checkNum(o.getType(), 1, 3)) o.setType(null);

        int i = LittleUtils.checkStartEndTime(o.getStartTime(), o.getEndTime());
        if (i == 1)
            return R.error("起始时间不能大于结束时间");
        else if (i == 2)
            return R.error("时间范围不允许超过两个月");

        if (ObjectUtils.isEmpty(o.getAgentId()))
            return R.error("团长编号有误");

        if (StringUtils.isNotBlank(o.getReceiverPhone()))
            if (!(o.getReceiverPhone().length() > 0 && o.getReceiverPhone().length() <5))
                return R.error("手机号有误");

        if (LittleUtils.checkNum(o.getStatus(), 0, 3)) o.setStatus(null);

        if (StringUtils.isNotBlank(o.getReceiverPhone()) && o.getReceiverPhone().length() >= 5)
            if (!Pattern.matches(RegExpression.PHONE_REG.getExpression(), o.getReceiverPhone()))
                return R.error("收货人手机号有误");

        return afterSalesService.queryOrder(page, size, o);
    }

    /**
     * 根据订单编号查询订单内商品
     */
    @PostMapping("/queryGoods")
    public R queryGoods(@RequestBody List<String> orderNo) {
        return afterSalesService.queryGoods(orderNo);
    }


    /**
     * 查询售后信息
     *
     * @param a 查询条件
     */
    @PostMapping("/queryAfterSales")
    public R queryAfterSales(Integer page, Integer size, @RequestBody AfterSalesVo a) {

        if (a.getUserId() == null && !(a.getUserId().toString().length() < 5))
            return R.error("团长编号有误");

        // 数据校验
        if (page == null || page < 1) page = 1;
        if (size == null || size < 1 || size > 100) size = 5;

        if (LittleUtils.checkNum(a.getPointType(), 1, 6)) return R.error("自提点类型有误");
        if (LittleUtils.checkNum(a.getAsType(), 1, 3)) return R.error("售后类型有误");
        if (LittleUtils.checkNum(a.getStatus(), 0, 3)) return R.error("售后状态有误");

        return afterSalesService.queryAfterSales(page, size, a);
    }
}
